﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Gustozzi.DAL;
namespace Gustozzi.BL
{
    public class MarketingBL
    {
        public int ActualizarCampaña(Campaña oCamp ,VentasDataEntities contexto )
        {
            
            var lstCamp = from c in contexto.Campañas
                           where c.codigoCampana == oCamp.codigoCampana
                          select c.codigoCampana;
            
            if (lstCamp.Count() <= 0)
            {
                var lstId=from c in contexto.Campañas
                          select c.codigoCampana;

                int idCamp = 1;

                if(lstId.Count()!=0)
                {
                    idCamp = lstId.Max();
                    idCamp += 1;
                }
                
                oCamp.codigoCampana = idCamp;
                oCamp.codigoPlan = 1;
            }
          
            return contexto.SaveChanges();
        }
        public int EliminarCampaña( int idCampaña)
        {
            VentasDataEntities contexto = new VentasDataEntities();
            var lstCamp = from c in contexto.Campañas
                          where c.codigoCampana == idCampaña
                          select c;

            if (lstCamp.Count() <= 0)
            {
                throw new Exception("No se ha encontrado campaña con el codigo indicado.");
            }
            else
            {
                contexto.DeleteObject(lstCamp.First());
            }
            return contexto.SaveChanges();
        }

        public int EliminarPromocion(int idPromocion)
        {
            VentasDataEntities contexto = new VentasDataEntities();
            var lstPromocion = from c in contexto.Promociones
                          where c.codigoPromocion == idPromocion
                          select c;

            if (lstPromocion.Count() <= 0)
            {
                throw new Exception("No se ha encontrado promocion con el codigo indicado.");
            }
            else
            {
                var lstDetallePromo = from c in contexto.PromocionItems 
                                        where c.codigoPromocion==idPromocion 
                                        select c;
                foreach (var item in lstDetallePromo)
                {
                    contexto.DeleteObject(item);
                }
                contexto.DeleteObject(lstPromocion.First());
            }
            return contexto.SaveChanges();
        }
        public int ActualizarPromocion(Promocion oPromocion, VentasDataEntities contexto) 
        {
            var lstCamp = from c in contexto.Promociones
                          where c.codigoPromocion == oPromocion.codigoPromocion
                          select c.codigoPromocion;

            if (lstCamp.Count() <= 0)
            {
                var lstId = from c in contexto.Promociones
                            select c.codigoPromocion;

                int idCamp = 1;

                if (lstId.Count() != 0)
                {
                    idCamp = lstId.Max();
                    idCamp += 1;
                }

                oPromocion.codigoPromocion = idCamp;
            }

            return contexto.SaveChanges();
        }
        public int ActualizarDetallePromocion(List<PromocionItem> lstPromo,int idPromocion) 
        {
            VentasDataEntities contexto = new VentasDataEntities();

            var lstItemDelete = from c in contexto.PromocionItems
                           where c.codigoPromocion  == idPromocion 
                           select c;

            foreach (var item in lstItemDelete)
            {
                contexto.DeleteObject(item);
            }
            contexto.SaveChanges();
            int idPromoDetalle = 1;
            foreach (var item in lstPromo)
            {
                var oItemDet = from c in contexto.PromocionItems
                               where c.codigoPromocionDetalle == item.codigoPromocionDetalle
                               && c.codigoPromocion == idPromocion
                               select c;
                PromocionItem oItem = null;
                if (oItemDet.Count() == 0)
                {
                    oItem = new PromocionItem();
                    contexto.PromocionItems.AddObject(oItem);

                    /*var oIDMax = from m in contexto.PromocionItems
                                 select m.codigoPromocionDetalle;
                   
                    if (oIDMax.Count()>0)
                    {
                        idPromoDetalle = oIDMax.Max();
                    }*/
                    oItem.codigoPromocionDetalle = idPromoDetalle;
                    oItem.codigoPromocion = idPromocion;
                    idPromoDetalle++;
                }
                else
                {
                    oItem = oItemDet.First();
                }
                oItem.cantidad = item.cantidad;
                oItem.precio = item.precio;
                oItem.codigoProducto  = item.codigoProducto;
            }
            
            return contexto.SaveChanges();
        }
    }
}
